package tec ;

public class TestAutobus
{
    TestAutobus()
    {
	lancer();
    }

    private void lancer()
    {
	System.out.println("Test de classe Autobus : ");
	
	System.out.println("."); testInstanciation(); 
	System.out.println(".");
        testMontee();

	System.out.println(".");
        testRemplissage();

	System.out.println(".");
        testChangement();

	System.out.println(".");
        testArret();

	System.out.println(".");
        testSortie();

	System.out.println(".");
        testLoufoque();

	System.out.println("OK");
    }

    private void testInstanciation()
    {
	Autobus bus = new Autobus(10,10);
	assert bus.aPlaceAssise() : "test aPlaceAssise(1) incorrect";
	assert bus.aPlaceDebout() : "test aPlaceDebout(1) incorrect";

	bus = new Autobus(0,10);
	assert !bus.aPlaceAssise() : "test aPlaceAssise(2) incorrect";
	assert bus.aPlaceDebout() : "test aPlaceDebout(2) incorrect";

	bus = new Autobus(10,-1);
	assert bus.aPlaceAssise() : "test aPlaceAssise(2) incorrect";
	assert !bus.aPlaceDebout() : "test aPlaceDebout(2) incorrect";
    }

    private void testMontee()
    {
       Autobus bus = new Autobus(5,4);
       FauxPassager toto = new FauxPassager() ;
       FauxPassager tata = new FauxPassager() ;

       toto.etat = FauxPassager.DEHORS ;
       tata.etat = FauxPassager.DEHORS ;

       bus.demanderPlaceAssise(toto);
       assert toto.etat == FauxPassager.ASSIS
          : "toto ASSIS incorrect" ;
	
       bus.demanderPlaceDebout(tata);
       assert tata.etat == FauxPassager.DEBOUT
          : "tata DEBOUT incorrect" ;
    }

    private void testRemplissage()
    {
       Autobus bus = new Autobus(2,1);

       FauxPassager tata1 = new FauxPassager() ;
       tata1.etat = FauxPassager.DEHORS ;
       bus.demanderPlaceAssise(tata1);
       assert tata1.etat == FauxPassager.ASSIS
          : "tata1 ASSIS incorrect" ;
       
       FauxPassager tata2 = new FauxPassager() ;
       tata2.etat = FauxPassager.DEHORS ;
       bus.demanderPlaceAssise(tata2);
       assert tata2.etat == FauxPassager.ASSIS
          : "tata2 ASSIS incorrect" ;

       //Plus de place assise pour tata3
       FauxPassager tata3 = new FauxPassager() ;
       tata3.etat = FauxPassager.DEHORS ;
       bus.demanderPlaceAssise(tata3);
       assert tata3.etat == FauxPassager.DEHORS
          : "tata3 DEHORS incorrect" ;

       //tata3 demande debout
       bus.demanderPlaceDebout(tata3);
       assert tata3.etat == FauxPassager.DEBOUT
          : "tata3 DEBOUT incorrect" ;

       //Plus de place debout pour tata4 :
       FauxPassager tata4 = new FauxPassager() ;
       bus.demanderPlaceDebout(tata4);
       assert tata4.etat == FauxPassager.DEHORS
          : "tata4 DEHORS incorrect" ;
    }

    private void testChangement()
    {
       Autobus bus = new Autobus(2,1);

       //Deux passagers assis
       FauxPassager tata1 = new FauxPassager();
       FauxPassager tata2 = new FauxPassager();
       bus.demanderPlaceAssise(tata1);
       bus.demanderPlaceAssise(tata2);

       bus.demanderChangerEnDebout(tata1);
       assert tata1.etat == FauxPassager.DEBOUT
          : "tata1 DEBOUT incorrect" ;
       assert tata2.etat == FauxPassager.ASSIS
          : "tata2  ASSIS incorrect" ;

       //Plus de place DEBOUT pour tata2
       bus.demanderChangerEnDebout(tata2);
       assert tata1.etat == FauxPassager.DEBOUT
          : "tata1 DEBOUT incorrect" ;
       assert tata2.etat == FauxPassager.ASSIS
          : "tata2  ASSIS incorrect" ;

       bus.demanderChangerEnAssis(tata1);
       assert tata1.etat == FauxPassager.ASSIS
          : "tata1 ASSIS incorrect" ;
       assert tata2.etat == FauxPassager.ASSIS
          : "tata2  ASSIS incorrect" ;

       bus.demanderChangerEnDebout(tata2);
       assert tata1.etat == FauxPassager.ASSIS
          : "tata1 DEBOUT incorrect" ;
       assert tata2.etat == FauxPassager.DEBOUT
          : "tata2  ASSIS incorrect" ;

    }

    private void testArret()
    {
       //Les faux passagers peuvent sortir sans demander l'arrêt.
       Autobus bus = new Autobus(2,1);

       FauxPassager tata1 = new FauxPassager() ;
       bus.demanderPlaceAssise(tata1);
       
       FauxPassager tata2 = new FauxPassager() ;
       bus.demanderPlaceDebout(tata2);

       tata1.DESTINATION = 2 ;
       tata2.DESTINATION = 3 ;

       //1er arrêt, tout le monde reste.
       bus.allerArretSuivant() ;
       assert tata1.etat == FauxPassager.ASSIS
          : "tata1 DEBOUT incorrect" ;
       assert tata2.etat == FauxPassager.DEBOUT
          : "tata2  ASSIS incorrect" ;

       bus.allerArretSuivant();
       assert tata1.etat == FauxPassager.DEHORS
          : "tata1 DEBOUT incorrect" ;
       assert tata2.etat == FauxPassager.DEBOUT
          : "tata2  ASSIS incorrect" ;

       bus.allerArretSuivant();
       assert tata1.etat == FauxPassager.DEHORS
          : "tata1 DEBOUT incorrect" ;
       assert tata2.etat == FauxPassager.DEHORS
          : "tata2  ASSIS incorrect" ;
    }

    private void testSortie()
    {
       Autobus bus = new Autobus(2,1);

       FauxPassager tata1 = new FauxPassager() ;
       bus.demanderPlaceAssise(tata1);
       
       FauxPassager tata2 = new FauxPassager() ;
       bus.demanderPlaceDebout(tata2);

       bus.demanderSortie(tata1) ;
       assert tata1.etat == FauxPassager.DEHORS
          : "tata1 DEHORS incorrect" ;
       assert tata2.etat == FauxPassager.DEBOUT
          : "tata2 DEBOUT incorrect" ;

       bus.allerArretSuivant();
       bus.demanderSortie(tata2);
       assert tata1.etat == FauxPassager.DEHORS
          : "tata1 DEHORS incorrect" ;
       assert tata2.etat == FauxPassager.DEHORS
          : "tata2 DEHORS incorrect" ;
    }

    private void testLoufoque()
    {
       Autobus bus = new Autobus(2,1);
       FauxPassager tata1 = new FauxPassager() ;
       bus.demanderChangerEnDebout(tata1);
       bus.demanderSortie(tata1);
    }
}
